package juego {
	import auxiliares.Grafico;
	
	import flash.geom.Rectangle;
	
	import mx.containers.Canvas;
	import mx.events.EffectEvent;

	public class Proyectil extends Grafico {
		protected var idPro: String;
		protected var idBarco: String;
		protected var idArma: String;
		protected var alcance: Number = 200;
		protected var anularFunction: Function = null;
		
		public function Proyectil(_idBarco: String, _idArma: String, _idPro: String, _contenedor:Canvas, _imagen: Object, _xPos:Number = 0, _yPos:Number = 0) {
			super(_contenedor, _imagen, _xPos, _yPos);
			idBarco = _idBarco;
			idArma = _idArma;
			idPro = _idPro;
			contenedorImagen.id = idBarco + "_" + idArma + "_" + _idPro;
			contenedorImagen.name = idBarco;
			setTimePixel(450);
			setTimePixelRotate(1);
		}
		
		public function detener(_type:String = null): void {
			if ( _type != null ) {
				stoped  = false;
			} else {
				stoped  = true;
			}
			super.stopMove();
			super.stopRotate();
		}
		
		override public function setEndMoveListener(_event:EffectEvent): void {
			//trace("setEndListener");
			super.setEndMoveListener(_event);
			
			if ( anularFunction != null ) {
				anularFunction(idBarco, idArma);
			}
			if ( stoped ) { 
				eliminar("stop");
				//trace("eliminando el proyectil stop");
			} else {
				eliminar("end");	
				//trace("eliminando el proyectil end");
			}
			
		}
		
		override public function mover(_newX:Number, _newY:Number): void {
			var angulo:Number = calcularAngulo(_newX, _newY);
			var radianes:Number = angulo * (Math.PI / 180);
			//trace ("xTo: "+_newX+" yTo: "+_newY+" angulo: "+angulo);
			
			var oldX:Number = getXPos();
			var oldY:Number = getYPos();
			
			//var h:Number = Math.sqrt(Math.pow((_newX - oldX), 2) + Math.pow((_newY - oldY), 2));
			var newX:Number = Math.round(Math.abs(Math.cos(radianes) * alcance));
			var newY:Number = Math.round(Math.abs(Math.sin(radianes) * alcance));
			
			//trace ( "newX: "+newX+" newY: "+newY);
			if (angulo < 90) {
				oldX += newX;
				oldY += newY;
			} else if (angulo < 180) {
				oldX -= newX;
				oldY += newY;
			} else if (angulo < 270) {
				oldX -= newX;
				oldY -= newY;
			} else {
				oldX += newX;
				oldY -= newY;
			}
			super.mover(oldX, oldY);			
		}
		
		public function setAnularFunction(_anularfunc: Function):void {
			anularFunction = _anularfunc;
		}
		
		public function getIdBarco(): String {
			return idBarco;
		}
		
		public function getIdArma(): String {
			return idArma;
		}
		
		public function getIdProyectil(): String {
			return idPro;
		}
		
		override public function eliminar(_type:String = null):void {
			eliminarFunction(idBarco, idArma, idPro, _type);
			if ( _type == null ) super.eliminar();
		}
		
	}
}